package com.tuling.learnjuc.base.communication;

import lombok.extern.slf4j.Slf4j;

/**
 * volatile保证可见性实现线程间通信
 * TODO 这两个线程主要通过共享内存的方式进行通信
 */

public class VolatileDemo {
    // 使用volatile可以读取到主线程修改的值
    private static volatile boolean stop = false;
//    private static boolean stop = false;

    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("线程t1开始执行");
                int i = 0;
                while (!stop) {
                    i++;
                }
                System.out.println("跳出循环");
            }
        }, "t1");
        t1.start();

        Thread.sleep(1000);
        // TODO 执行观察控制台 现象：主线程修改值但是未退出循环，主要原因是Java内存模型
        stop = true;
        System.out.println("主线程修改stop=true");

    }
}